package com.unitd.comm.shiro;

import com.unitd.frame.sso.common.token.Token;
import com.unitd.frame.sso.service.auth.ISSOAuthorization;
import com.unitd.modules.sys.dao.ISysMenuDao;
import com.unitd.modules.sys.entity.SysMenu;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

 /**
 * @desc 菜单权限表数据服务层接口实现类; 实现权限接口 ISSOAuthorization
 * @filename ShiroPermissionImpl.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017/3/21
 */
@Service("permissionService")
public class PermissionServiceImpl implements ISSOAuthorization {

	@Autowired
	private ISysMenuDao sysMenuDao;

	/**
	 * @desc 判断进行访问的客户端是否具有访问权限
	 * @param token 访问token(实际存储在cookie中)
	 * @param permission 权限串
	 * @return 访问权限标识
	 */
	@Override
	public boolean isPermitted(Token token, String permission) {
		// 菜单级别、权限验证，生产环境建议加上缓存处理。
		if (StringUtils.isNotBlank(permission)) {
			List<SysMenu> sysMenus = sysMenuDao.findListByUserId(token.getUid());
			if (sysMenus != null) {
				for (SysMenu sysMenu : sysMenus) {
					if (permission.equals(sysMenu.getPerms())) {
						return true;
					}
				}
			}
		}
		return false;
	}

	/**
	 * @desc 判断进行访问的客户端是否具有按钮级别操作权限
	 * @param token      访问token(实际存储在cookie中)
	 * @param permission 权限串
	 * @return 访问权限标识
	 */
	@Override
	public boolean isActionable(Token token, String permission) {
		// 按钮级别、权限验证; 生产环境建议加上缓存处理;演示  admin 返回 true
//		System.err.println("当前请求的权限为: isActionable = " + permission);
		if("1".equals(token.getId())) {
			return true;
		}
		return false;
	}
}